/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Datos;

import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.JDOMParseException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;

/**
 *
 * @author Rodrigo Uzcátegui
 */
public class CargaProductos
{
    private static String nombreArchivo = "src/Datos/XMLProducto.xml";
    private static String nombreArchivo1 = "src/Datos/XMLProductoEliminado.xml";

    public static void leerProductosXML(List listaDeProductos)
    {
        try
        {
            SAXBuilder builder = new SAXBuilder();
            try
            {
                Document doc = builder.build(nombreArchivo);
                Element raiz = doc.getRootElement();
               
                System.out.println(raiz.getAttributeValue("tipo"));

                List losProductos = raiz.getChildren("producto");

                System.out.println("Formada por: " + losProductos.size() + " Productos");
                System.out.println("------------------");

                Iterator i = losProductos.iterator();
                while (i.hasNext())
                {
                    Element e = (Element) i.next();
                    Element nombre = e.getChild("nombre");
                    Element precio = e.getChild("precio");
                    Element perecedero = e.getChild("perecedero");
                    Element código = e.getChild("código");
                    Element descripción = e.getChild("descripción");
                    Element rubro = e.getChild("rubro");
                    Element cantidad = e.getChild("cantidad");
                    Element unidad = e.getChild("unidad");
                    Element pvp = e.getChild("pvp");
                    Element fechaCaducidad = e.getChild("fechaCaducidad");
                    Element bajoRégimenPrecios = e.getChild("bajoRégimenPrecios");
                    Element oferta = e.getChild("oferta");
                    Element urlImágen = e.getChild("urlImágen");
                    Element empaque = e.getChild("empaque");
                    Element ingredientes = e.getChild("ingredientes");
                    Element tamaño = e.getChild("tamaño");
                    Element temperatura = e.getChild("temperatura");
                    Element fechaElaboración = e.getChild("fechaElaboración");
                    Element esProductoPropio = e.getChild("esProductoPropio");
                    Element estatus = e.getChild("estatus");

                    Producto producto = new Producto();
                    producto.setEstatus('a');
                    producto.setNombre(nombre.getText());
                    producto.setDescripción(descripción.getText());
                    producto.setRubro(rubro.getText());
                    producto.setURLImágen(urlImágen.getText());
                    producto.setTamaño(tamaño.getText());
                    producto.setCódigo(código.getText());
                    producto.setUnidad(unidad.getText());

                    String[] ingredientesArray = ingredientes.getText().split("/");
                    producto.setIngredientes(ingredientesArray);

                    producto.setFechaCaducidad(fechaCaducidad.getText());
                    producto.setFechaElaboración(fechaElaboración.getText());

                    boolean poseeOferta;
                    float porcentaje;
                    if(oferta.getText().equals("NO APLICA"))
                    {
                        poseeOferta = false;
                        porcentaje = 0;
                    }
                    else
                    {
                        poseeOferta = true;
                        String[] parámetrosArray = oferta.getText().split("/");
                        String valorPorcentual = parámetrosArray[1];
                        valorPorcentual = valorPorcentual.replace("%", "");
                        porcentaje = Float.parseFloat(valorPorcentual);
                    }

                    producto.setOferta(poseeOferta, porcentaje);

                    producto.setEmpaque(empaque.getText());

                    if(esProductoPropio.getText().equals("No"))
                        producto.setEsProductoPropio(false);
                    else
                        producto.setEsProductoPropio(true);

                    if(perecedero.getText().equals("No"))
                        producto.setPerecedero(false);
                    else
                    {
                        producto.setPerecedero(true);
                        float temperaturaFloat = Float.parseFloat(temperatura.getText());
                        producto.setTemperatura(temperaturaFloat);
                    }

                    if(bajoRégimenPrecios.getText().equals("No"))
                        producto.setBajoRégimenPrecios(false);
                    else
                        producto.setBajoRégimenPrecios(true);

                    int cantidadInt = Integer.parseInt(cantidad.getText());
                    producto.setCantidad(cantidadInt);

                    double precioDouble = Double.parseDouble(precio.getText());
                        producto.setPrecio(precioDouble);

                    double PVPDouble = Double.parseDouble(pvp.getText());
                    producto.setPVP(PVPDouble);

                    listaDeProductos.add(producto);
                }
            }
            catch(JDOMParseException e)
            {
                System.out.println("Archivo vacio");
            }
        }
        catch (Exception e) 
        {

        }
    }

    public static void leerProductosEliminadosXML(List listaDeProductos)
    {
        try
        {
            SAXBuilder builder = new SAXBuilder();
            try
            {
                Document doc = builder.build(nombreArchivo1);
                Element raiz = doc.getRootElement();

                System.out.println(raiz.getAttributeValue("tipo"));

                List losProductos = raiz.getChildren("producto");

                System.out.println("Formada por: " + losProductos.size() + " Productos");
                System.out.println("------------------");

                Iterator i = losProductos.iterator();
                while (i.hasNext())
                {
                    Element e = (Element) i.next();
                    Element nombre = e.getChild("nombre");
                    Element perecedero = e.getChild("perecedero");
                    Element código = e.getChild("código");
                    Element descripción = e.getChild("descripción");
                    Element rubro = e.getChild("rubro");
                    Element unidad = e.getChild("unidad");
                    Element urlImágen = e.getChild("urlImágen");
                    Element empaque = e.getChild("empaque");
                    Element ingredientes = e.getChild("ingredientes");
                    Element tamaño = e.getChild("tamaño");
                    Element temperatura = e.getChild("temperatura");
                    Element esProductoPropio = e.getChild("esProductoPropio");
                    Element estatus = e.getChild("estatus");
                    Element fechaElaboración = e.getChild("fechaElaboración");
                    
                    Producto producto = new Producto();
                    producto.setEstatus('i');
                    producto.setNombre(nombre.getText());
                    producto.setDescripción(descripción.getText());
                    producto.setRubro(rubro.getText());
                    producto.setURLImágen(urlImágen.getText());
                    producto.setTamaño(tamaño.getText());
                    producto.setCódigo(código.getText());
                    producto.setUnidad(unidad.getText());

                    String[] ingredientesArray = ingredientes.getText().split("/");
                    producto.setIngredientes(ingredientesArray);

                    producto.setFechaCaducidad("01-01-0001");
                    producto.setFechaElaboración(fechaElaboración.getText());

                    producto.setOferta(false, 0);

                    producto.setEmpaque(empaque.getText());

                    if(esProductoPropio.getText().equals("No"))
                        producto.setEsProductoPropio(false);
                    else
                        producto.setEsProductoPropio(true);

                    if(perecedero.getText().equals("No"))
                        producto.setPerecedero(false);
                    else
                    {
                        producto.setPerecedero(true);
                        float temperaturaFloat = Float.parseFloat(temperatura.getText());
                        producto.setTemperatura(temperaturaFloat);
                    }
                    producto.setBajoRégimenPrecios(true);
                    producto.setPrecio(0);
                    producto.setPVP(0);
                    listaDeProductos.add(producto);
                }
            }
            catch(JDOMParseException e)
            {
                System.out.println("Archivo vacio");
            }
        }
        catch (Exception e)
        {

        }
    }

    public static void guardarTodosLosProductosXML(List listaDeProductos)
    {
        Producto productoAGuardar;
        Element root = new Element("Productos");
        root.setAttribute("tipo","Lista de Productos");
        Iterator iterador = listaDeProductos.iterator();
        while (iterador.hasNext())
        {
            Element producto = new Element("producto");
            productoAGuardar = (Producto) iterador.next();

            Element nombre = new Element("nombre");
            Element precio = new Element("precio");
            Element perecedero = new Element("perecedero");
            Element código = new Element("código");
            Element descripción = new Element("descripción");
            Element rubro =  new Element("rubro");
            Element cantidad =  new Element("cantidad");
            Element unidad =  new Element("unidad");
            Element pvp =  new Element("pvp");
            Element fechaCaducidad = new Element("fechaCaducidad");
            Element bajoRégimenPrecios =  new Element("bajoRégimenPrecios");
            Element oferta =  new Element("oferta");
            Element urlImágen =  new Element("urlImágen");
            Element empaque =  new Element("empaque");
            Element ingredientes =  new Element("ingredientes");
            Element tamaño =  new Element("tamaño");
            Element temperatura =  new Element("temperatura");
            Element fechaElaboración =  new Element("fechaElaboración");
            Element esProductoPropio =  new Element("esProductoPropio");
            
            nombre.setText(productoAGuardar.getNombre());

            Double precioDouble = productoAGuardar.getPrecio();
            String precioString = precioDouble.toString();
            precio.setText(precioString);

            if(productoAGuardar.isPerecedero())
            {
                perecedero.setText("Si");
                Float temperaturaFloat = productoAGuardar.getTemperatura();
                String temperaturaString = temperaturaFloat.toString();
                temperatura.setText(temperaturaString);
            }
            else
            {
                perecedero.setText("No");
                temperatura.setText("NO APLICA");
            }

            código.setText(productoAGuardar.getCódigo());
            descripción.setText(productoAGuardar.getDescripción());
            rubro.setText(productoAGuardar.getRubro());

            Integer cantidadInteger = productoAGuardar.getCantidad();
            String cantidadString = cantidadInteger.toString();
            cantidad.setText(cantidadString);

            unidad.setText(productoAGuardar.getUnidad());

            Double pvpDouble = productoAGuardar.getPVP();
            String pvpString = pvpDouble.toString();
            pvp.setText(pvpString);

            Date fechaCaducidadDate = productoAGuardar.getFechaCaducidad();
            SimpleDateFormat formatoFecha = new SimpleDateFormat("dd-MM-yyyy");
            String fechaCaducidadString = formatoFecha.format(fechaCaducidadDate);
            fechaCaducidad.setText(fechaCaducidadString);

            if(productoAGuardar.isBajoRégimenPrecios())
                bajoRégimenPrecios.setText("Si");
            else
                bajoRégimenPrecios.setText("No");

            if(productoAGuardar.getOferta().isPoseeOferta())
            {
                String ofertaString = "Si/";
                Float porcentajeOferta = productoAGuardar.getOferta().getPorcentajeOferta();
                String porcentajeOfertaString = porcentajeOferta.toString();
                ofertaString += porcentajeOfertaString + "%";
                oferta.setText(ofertaString);
            }
            else
            {
                oferta.setText("NO APLICA");
            }

            urlImágen.setText(productoAGuardar.getURLImágen());

            Float Altura = productoAGuardar.getEmpaque().getAltura();
            Float Profundidad = productoAGuardar.getEmpaque().getProfundidad();
            Float Ancho = productoAGuardar.getEmpaque().getAncho();
            String alturaString = Altura.toString();
            String profundidadString = Profundidad.toString();
            String anchoString = Ancho.toString();
            String empaqueString = alturaString + "/" + profundidadString + "/" + anchoString;
            empaque.setText(empaqueString);

            String[] ingredientesStringArray = productoAGuardar.getIngredientes();
            String cadenaIngredientes = "";
            for(int i = 0; i<ingredientesStringArray.length; i++)
            {
                if(i == ingredientesStringArray.length -1)
                {
                    cadenaIngredientes = cadenaIngredientes + ingredientesStringArray[i];
                    break;
                }
                cadenaIngredientes = cadenaIngredientes + ingredientesStringArray[i] + "/";
                
            }
            ingredientes.setText(cadenaIngredientes);

            tamaño.setText(productoAGuardar.getTamaño());

            if(productoAGuardar.isEsProductoPropio())
            {
                esProductoPropio.setText("Si");
                Date fechaElaboraciónDate = productoAGuardar.getFechaElaboración();
                String fechaElaboraciónString = formatoFecha.format(fechaElaboraciónDate);
                fechaElaboración.setText(fechaElaboraciónString);
            }
            else
            {
                esProductoPropio.setText("No");
                fechaElaboración.setText("NO APLICA");
            }

            producto.addContent(nombre);
            producto.addContent(precio);
            producto.addContent(perecedero);
            producto.addContent(código);
            producto.addContent(descripción);
            producto.addContent(rubro);
            producto.addContent(cantidad);
            producto.addContent(unidad);
            producto.addContent(pvp);
            producto.addContent(fechaCaducidad);
            producto.addContent(bajoRégimenPrecios);
            producto.addContent(oferta);
            producto.addContent(urlImágen);
            producto.addContent(empaque);
            producto.addContent(ingredientes);
            producto.addContent(tamaño);
            producto.addContent(temperatura);
            producto.addContent(fechaElaboración);
            producto.addContent(esProductoPropio);

            root.addContent(producto);
        }
        Document doc = new Document(root);
        try
        {
            XMLOutputter out = new XMLOutputter(org.jdom.output.Format.getPrettyFormat());
            FileOutputStream file = new FileOutputStream(nombreArchivo);
            out.output(doc,file);
            file.flush();
            file.close();
            out.output(doc,System.out);
        }
        catch(Exception e) {}
    }

    public static void guardarProductosEliminadosXML(List listaDeProductos)
    {
        Producto productoAGuardar;
        Element root = new Element("Productos");
        root.setAttribute("tipo","Lista de Productos Eliminados");
        Iterator iterador = listaDeProductos.iterator();
        while (iterador.hasNext())
        {
            Element producto = new Element("producto");
            productoAGuardar = (Producto) iterador.next();

            Element nombre = new Element("nombre");
            Element precio = new Element("precio");
            Element perecedero = new Element("perecedero");
            Element código = new Element("código");
            Element descripción = new Element("descripción");
            Element rubro =  new Element("rubro");
            Element cantidad =  new Element("cantidad");
            Element unidad =  new Element("unidad");
            Element pvp =  new Element("pvp");
            Element fechaCaducidad = new Element("fechaCaducidad");
            Element bajoRégimenPrecios =  new Element("bajoRégimenPrecios");
            Element oferta =  new Element("oferta");
            Element urlImágen =  new Element("urlImágen");
            Element empaque =  new Element("empaque");
            Element ingredientes =  new Element("ingredientes");
            Element tamaño =  new Element("tamaño");
            Element temperatura =  new Element("temperatura");
            Element fechaElaboración =  new Element("fechaElaboración");
            Element esProductoPropio =  new Element("esProductoPropio");

            nombre.setText(productoAGuardar.getNombre());
            precio.setText("NO APLICA");

            if(productoAGuardar.isPerecedero())
            {
                perecedero.setText("Si");
                Float temperaturaFloat = productoAGuardar.getTemperatura();
                String temperaturaString = temperaturaFloat.toString();
                temperatura.setText(temperaturaString);
            }
            else
            {
                perecedero.setText("No");
                temperatura.setText("NO APLICA");
            }

            código.setText(productoAGuardar.getCódigo());
            descripción.setText(productoAGuardar.getDescripción());
            rubro.setText(productoAGuardar.getRubro());
            cantidad.setText("NO APLICA");
            unidad.setText(productoAGuardar.getUnidad());
            pvp.setText("NO APLICA");
            fechaCaducidad.setText("NO APLICA");
            bajoRégimenPrecios.setText("NO APLICA");
            oferta.setText("NO APLICA");

            urlImágen.setText(productoAGuardar.getURLImágen());

            Float Altura = productoAGuardar.getEmpaque().getAltura();
            Float Profundidad = productoAGuardar.getEmpaque().getProfundidad();
            Float Ancho = productoAGuardar.getEmpaque().getAncho();
            String alturaString = Altura.toString();
            String profundidadString = Profundidad.toString();
            String anchoString = Ancho.toString();
            String empaqueString = alturaString + "/" + profundidadString + "/" + anchoString;
            empaque.setText(empaqueString);

            String[] ingredientesStringArray = productoAGuardar.getIngredientes();
            String cadenaIngredientes = "";
            for(int i = 0; i<ingredientesStringArray.length; i++)
            {
                if(i == ingredientesStringArray.length -1)
                {
                    cadenaIngredientes = cadenaIngredientes + ingredientesStringArray[i];
                    break;
                }
                cadenaIngredientes = cadenaIngredientes + ingredientesStringArray[i] + "/";

            }
            ingredientes.setText(cadenaIngredientes);

            tamaño.setText(productoAGuardar.getTamaño());

            if(productoAGuardar.isEsProductoPropio())
            {
                SimpleDateFormat formatoFecha = new SimpleDateFormat("dd-mm-yyyy");
                esProductoPropio.setText("Si");
                Date fechaElaboraciónDate = productoAGuardar.getFechaElaboración();
                String fechaElaboraciónString = formatoFecha.format(fechaElaboraciónDate);
                fechaElaboración.setText(fechaElaboraciónString);
            }
            else
            {
                esProductoPropio.setText("No");
                fechaElaboración.setText("NO APLICA");
            }

            producto.addContent(nombre);
            producto.addContent(precio);
            producto.addContent(perecedero);
            producto.addContent(código);
            producto.addContent(descripción);
            producto.addContent(rubro);
            producto.addContent(cantidad);
            producto.addContent(unidad);
            producto.addContent(pvp);
            producto.addContent(fechaCaducidad);
            producto.addContent(bajoRégimenPrecios);
            producto.addContent(oferta);
            producto.addContent(urlImágen);
            producto.addContent(empaque);
            producto.addContent(ingredientes);
            producto.addContent(tamaño);
            producto.addContent(temperatura);
            producto.addContent(fechaElaboración);
            producto.addContent(esProductoPropio);

            root.addContent(producto);
        }
        Document doc = new Document(root);
        try
        {
            XMLOutputter out = new XMLOutputter(org.jdom.output.Format.getPrettyFormat());
            FileOutputStream file = new FileOutputStream(nombreArchivo1);
            out.output(doc,file);
            file.flush();
            file.close();
            out.output(doc,System.out);
        }
        catch(Exception e) {}
    }
}
